package top.byteio.common.core.utils;

public final class ParamRegexUtils {

    /**
     * 验证手机号
     * <br>
     * 解释一下这个正则表达式：
     * <br>-  ^ ：表示字符串的起始位置。
     * <br>-  1 ：表示数字 1。
     * <br>-  [3-9] ：表示数字 3 到 9 中的一个。
     * <br>-  \\d{9} ：表示由数字组成的一组长度为 9 的字符串。
     * <br>-  $ ：表示字符串的结束位置。
     *
     * @param phone 手机号码
     * @return boolean
     * @author lerryxia
     */
    public static boolean phoneNumber(String phone) {
        String regex = "^1[3-9]\\d{9}$";
        return phone.matches(regex);
    }


    /**
     * 验证邮箱
     * <br>解释一下这个正则表达式：
     * <br>-  ^ ：表示字符串的起始位置。
     * <br>-  [A-Za-z0-9+_.-]+ ：表示由大小写字母、数字、加号、下划线、点和减号组成的字符串，且长度不限。
     * <br>-  @ ：表示 @ 符号。
     * <br>-  [A-Za-z0-9.-]+ ：表示由大小写字母、数字、点和减号组成的字符串，且长度不限。
     * <br>-  \. ：表示点号（需要使用转义符号 \）。
     * <br>-  [A-Za-z]{2,} ：表示由大小写字母组成的字符串，且长度至少为 2。
     * <br>-  $ ：表示字符串的结束位置。
     *
     * @param email 邮箱
     * @return boolean
     * @author lerryxia
     */
    public static boolean email(String email) {
        String regex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$";
        return email.matches(regex);
    }

    /**
     * 检查密码是否符合以下规则：
     * <br>- 长度为8-16个字符
     * <br>- 必须包含至少一个字母
     *
     * @param password 密码
     * @return boolean
     * @author lerryxia
     */
    public static boolean password(String password) {
        String regex = "^(?=.*[a-zA-Z]).{8,16}$";
        return password.matches(regex);
    }

    /**
     * 验证用户名是否合法
     *
     * @param username 用户名
     * @return boolean
     * @author lerryxia
     * @since 2023/7/9 23:08
     */
    public static boolean username(String username) {
        String regex = "^[A-Za-z0-9-]{6,25}$";
        return username.matches(regex);
    }

}
